Monografias.com > Uncategorized
Descargar Imprimir Comentar Ver trabajos relacionados
Partes: 1, 2, 3, 4, 5, 6

 

 

Cap�tulo II: ” Lenguaje de Programaci�n
Estructurado C”

 

�Por qu� programaci�n estructurada?

Si el lector recuerda, en el cap�tulo anterior, se hablaba
de las caracter�sticas del lenguaje C, y en una de ellas se dec�a
que, el Lenguaje de Programaci�n C, permite la programaci�n estructurada.
Esto implica que, haremos uso de una t�cnica llamada L�gica
Estructurada,
y esto no es m�s ni menos que una de las t�cnicas
b�sicas y fundamentales de la programaci�n estructurada, su objetivo
es dise�ar soluciones “correctas” y confiables a los problemas,
ignorando al principio consideraciones de eficiencia como la minimizaci�n
del uso de memoria y el tiempo de su respuesta.

Lo que significa que, haremos uso de esa t�cnica para
crear programas correctos; esta es una t�cnica que ayuda al programador
(un tanto a la fuerza), a ser ordenado, al momento de programar.

Los frutos de �sta t�cnica se reflejan cuando,
queremos darle mantenimiento al programa, es m�s f�cil hacerlo
ya que hemos programado de una manera l�gica y ordenada. Al igual
que al momento de corregir errores de sintaxis y l�gica, esta t�cnica
nos facilita el trabajo.

Ahora iniciemos, de una vez por todas, lo que el lector est�
esperando:

 

Sintaxis de Algunos Elementos de Un Programa en C

 

  • identificadores:

 

como su nombre lo indica, estos son los nombres, con los
que identificamos las variables, constantes, funciones, vectores, etc, de
nuestro programa. Para ello debemos tener presente algunas reglas:

>pueden tener de 1 hasta un m�ximo de 31 caracteres

>Debe de iniciar con una letra o subrayado

Ejemplo:

(Correctos)

c2

_c2

( Incorrectos)

2c

2 c

>No es lo mismo una min�scula que una may�scula,
ya que c distingue de entre ellas. Ejemplo: BETA ¹
Beta ¹ beta ¹
BeTa

>No son v�lidos los identificadores de palabras
reservadas. En un inicio hablamos que c posee 32 palabras reservadas, entre
ellas est�n:

float char while

int else return

Estas palabras no pueden ser utilizadas para identificar
variables, constantes, funciones etc

 

      1. Comentarios

 

En todo programa que estemos dise�ando en C (o en
cualquier otro lenguaje de programaci�n); es necesario insertar ciertos
comentarios en el c�digo, para que en posteriores modificaciones
y cuando se realice el mantenimiento, podamos recordar cosas importantes
ya que, en los comentarios, podemos incluir aspectos importantes del programas,
explicaciones del funcionamiento de las sentencias, etc.

El formato de los comentarios en C, es el siguiente:

 

  • La Directiva #include

 

 

Permite que, el pre-procesador, incluya funciones proporcionadas
por el fabricante, a nuestro programa. Ejemplo:

#include <stdio.h> /* le decimos al compilador
que incluya la librer�a

stdio.h */

 

  • la directiva #define

 

 

permite definir constantes simb�licas. Pero hasta
ahora ha sido poco lo que hemos hablado acerca de las constantes, es por
ello que en aprovechando, este especio; dedicar� unas cuantas l�neas
para aclarar ello.

Las variables pueden cambiar de valor, durante la ejecuci�n
del programa, por eso es que se llaman variables. Y las constantes
como su nombre lo indica, son valores que permanecen constantes durante
toda la ejecuci�n del programa, un ejemplo de ello, es el valor de
p (pi) que equivale a 3.14159….

En C existen diferentes tipos de variables, entre ellas
tenemos:

 

1. Constates Num�ricas:

 

Son valores num�ricos, enteros o de reales (de punto
flotante). Se permiten tambi�n constantes octales y hexadecimales.

 

2. Constantes Simb�licas:

 

las constantes simb�licas tiene un nombre (identificador),
y en esto se parecen las variables. Sin embargo, no pueden cambiar de valor
a lo largo de la ejecuci�n del programa. En C, se pueden definir
mediante el preprocesador.

(Tomado del Manual “Aprenda Lenguaje ANSI C como
si estuviera en Primero”
Escuela superior de Ingenieros Industriales.
Universidad de Navarra. Febrero de 1998).

Ejemplo:

Esta directiva (#define) va, inmediatamente despu�s
de los #include. Se escribe la directiva, se deja un espacio y se escribe
el identificador de la constante, otro espacio y su valor.

 

  • Signos de Puntuaci�n y de Separaci�n

 

 

/ ! % ^ & * () – + {}
[] ; : <> � .

 

  • Todas las Instrucciones o sentencias del programa terminan con un punto
    y coma (;)

 

 

Al momento de programar en C, esta es una regla
de oro, y la causa por la cual nuestro programa puede darnos muchos errores
de sintaxis, cuando se omite, al final de cada sentencia un punto y coma
(;). Ya que con ello le indicamos al compilador que ha finalizado una sentencia.

NOTA: el lector no debe confundirse, las directivas: #include,
#define. Main(), no llevan punto y coma, por que no son sentencias.

Recordemos el ejemplo 1.1, y vea que al final de cada sentencia
lleva su correspondiente punto y coma:

 

  • Todo Bloque de Instrucciones debe ir entre llaves

 

 

Esta consideraci�n toma mayor auge, cuando veamos
las instrucciones anidadas en condiciones, ciclos, etc.

Ejemplo:

 

  • En una l�nea se pueden escribir m�s de una instrucci�n
    separada por un punto y coma

 

 

Esto es posibles, por que con el punto y coma, le estamos indicando
al compilador el fin de una sentencia o instrucci�n.

Ejemplo:

 

Tipos de Datos en C

 

Un tipo de dato, se define como un conjunto de valores que
puede tener una variables, junto con ciertas operaciones que se pueden realizar
con ellas.

*TIPOS DE DATOS PREDEFINIDOS

 

TABLA CON LOS TIPOS DE DATOS PREDEFINIDOS EN C

>ENTEROS: numeros completos y sus negativos

Palabra reservada:

Ejemplo

Tama�o (byte)

Rango de valores

int

-850

2

-32767 a 32767

VARIANTES DE ENTEROS

short int

-10

1

-128 a 127

unsigned int

45689

2

0 a 65535

long int

588458

4

-2147483648 a 2147483647

unsigned long

20000

4

0 a 4294967295

>REALES: n�meros con decimales o punto flotante

Palabra reservada:

Ejemplo

Tama�o (byte)

Rango de valores

float

85

4

3.4×10-38 a 3.4×1038

VARIANTES DE LOS REALES

double

0.0058

8

1.7×10-308 a 1.7×10308

long double

1.00E-07

10

3.4×10-4932 a 1.1×104932

>CAR�CTER: letras, digitos, s�mbolos, signos de puntuaci�n.

Palabra reservada:

Ejemplo

Tama�o (byte)

Rango de valores

char

‘O’

1

0 ……255

 

TABLA 2.1

 

Declaraci�n de Variables

 

Una Variable, como su nombre lo indica, es capaz de almacenar diferentes valores durante la ejecuci�n del programa, su valor var�a. Es un lugar en la memoria el cual, posee un nombre (identificador), y un valor asociado.

La declaraci�n de variables en C, se hace en min�sculas.

Formato:

 

Tipo_de_dato nombre_de_la_variable;

 

Ejemplos:

*Declare una variable de tipo entero y otra de tipo real, una con el nombre de “x” y otra con el identificador “y”:

int x;

float y;

*Declare una variable de tipo entero llamada moon, e inicial�cela con un valor de 20

int x = 20;

*Declare una variable de tipo real, llamada Pi, e inicial�cela con una valor de 3.1415

float pi=3.1415;

*Declare una variable de tipo caracrter y as�gnele el valor de “M”

char car = �M�;

*Declare una variable llamada nombre, que contenga su nombre:

char nombre[7]=”Manuel”;

 

Explicaci�n:

 

En el apartado anterior, se explic�, que C, no tiene el tipo de dato llamado string, o mejor conocido como cadenas de texto, pero nosotros podemos hacer uso de ellas, por medio de un arreglo, (de lo cual hablaremos con m�s detalle, posteriormente); pero para declarar este tipo de datos colocamos el tipo de datos, es decir la palabra reservada char luego el nombre, e inmediatamente abrimos, entre corchetes, va el n�mero de letras, que contendr� dicha variable. Es muy importante que al momento de declarar el tama�o, sea un n�mero mayor, al verdadero n�mero de letras; por ejemplo, la palabra “Manuel”, solo tiene 6 letras, pero debemos declararlo para 7 letras �Por qu�?.

Ve�moslo gr�ficamente, en la memoria, C crea un variable llammada nombre y esta posee la palabra Manuel, as�:

en realidad, hay 7 espacios, pero la cuanta llega hasta 6, por que c, toma la primera posici�n como la posici�n cero, y para indicar el final de la cadena lo hace con un espacio en blanco.

 

Declaraci�n de Constantes

 

Las constantes, como su nombre lo indica, son valores que se mantiene invariables durante la ejecuci�n del programa.

Su formato es el siguiente:

const tipo_de_dato nombre= valor;

donde const, es una palabra reservada, para indicarle al compilador que se esta declarando una constante.

Ejemplo:

const int dia=7;

const float pi=3.14159;

const char caracter= �m�;

const char fecha[]=”25 de diciembre”;

 

Caso Especial Constantes Simb�licas

 

Las constantes simb�licas, se declaran mediante la directiva #define, como se explic� anteriormente. Funcionan de la siguiente manera, cuando C, encuentra el s�mbolo que representa a la constante, lo sustituye por su respectivo valor.

Ejemplo:

#define N 150

#define PI 3.1416

#define P 50

 

 

Entrada y Salida Por Consola

 

Entrada y Salida por consola: se refiere a las operaciones que se producen en el teclado y en la pantalla de la computadora. En C no hay palabras claves para realizar las acciones de Entrada/Salida, estas se hacen mediante el uso de las funciones de la biblioteca est�ndar (stadio.h).

Para utilizar las funciones de E / S debemos incluir en el programa el archivo de cabecera stdio.h, mediante la declaratoria:

#include <stdio.h>

Las Funciones de E / S m�s simples son getchar() que lee un car�cter del teclado, espera un retorno de carro (¿
), es decir un enter y el eco aparece. Es decir la tecla presionada.

*putchar(): Imprime un car�cter en la pantalla, en la posici�n actual del cursor.

Algunas variaciones:

*getche(): Aparece el Eco

*getch(): No aparece el eco

estas instrucciones se encuentran en la biblioteca conio.h

Veamos un ejemplo:

Programa que espera que se presiona una tecla, la muestra en pantalla, y adem�s muestra el car�cter siguiente:

Ejemplo 2.1:

#include <stdio.h>

#include <conio.h>

main()

{

char car;

clrscr(); /*Se encarga de borrar la pantalla por eso se llama claer screen*/

car=getchar();

putchar(car+1);

getch();

return 0;

}

 

Ejemplo 2.2:

#include <stdio.h>

#include <conio.h>

main()

{

char x; /*Declaramos x como caracter*/

printf(“Para Finalizar Presione cualquier Tecla:”);

x= getchar();/*Captura y muestra el caracter presionado*/

getch();/*Espera a que se presione cualquier otra tecla para finalizar*/

return 0;

}

 

Entrada / Salida de Cadenas

 

Una Cadena, es una frase, compuesta por varias palabras. En C, podemos hacer uso de las cadenas, mediante, la sentencia:

*gets(): Lee una cadena de car�cter introducido por el teclado. Se puede introducir caracteres hasta que se de un retorno de carro, (enter); el cual no es parte de la cadena; en su lugar se coloca un terminador nulo .

*puts(): Imprime en pantalla, el argumento guardado en la variable que se manda a impresi�n.

Ejemplo 2.3

Dise�e un programa en C, que lea su nombre; lo salude y mande a impresi�n su nombre, usando gets e y puts

#include <stdio.h>

#include <conio.h>

main()

{

char nombre[40];

puts(“digite su nombre:”);

gets(nombre);

puts(“BIENVENIDO:”);

puts(nombre);

getch();

return 0;

}

NOTA: No har� mucho �nfasis en estas instrucciones, ya que m�s adelante, veremos las instrucciones scanf() y printf(), que son mucho m�s completas.

 

Entrada / Salida Por Consola con Formato

 

Las funciones gets, puts, getch, etc; son utilizadas, en una forma un poco rudimentaria, sin embargo; C posee otra serie de funciones, que son m�s completas, las cuales nos permiten leer e imprimir (en pantalla), datos con un formato determinado, el cual ha sido definido por el programador.

 

Salida Hacia Pantalla [printf()]

 

Se utiliza para imprimir en pantalla cadenas de texto solas, o mandar a pantalla el valor de alguna variable, o constante, o una combinaci�n de las anteriores. Su formato es el siguiente:

Printf(“cadena de control“, nombre_de_variables);

En donde:

Cadena de control: contiene c�digos de formato que se asocian con los tipos de datos contenidos en las variables.

 

C�digo

Formato

%d

Un entero

%i

Un entero

%c

Una caracter

%s

Una cadena

%f

Un real

%ld

Entero largo

%u

Decimal sin signo

%lf

Doble posici�n

%h

Entero corto

%o

Octal

%x

Hexadecimal

%e

Notaci�n Cient�fica

%p

Puntero

%%

Imprime Porcentaje

 

TABLA 2.2

Ejemplo:

Int suma=10;

Printf(“La suma es %d”, suma);

 

Explicaci�n:

 

Declaramos primero la variable como entero, con un valor de 10, luego la funci�n printf, el mensaje va entre comillas dobles, luego en el lugar que queremos que aparezca el valor, colocamos el formato de la variable, cerramos comillas, luego una coma y el nombre de la variable. Es importante recalcar, que en la posici�n que coloquemos el formato es donde aparecer� el valor de la variable en este caso, 10.

Ejemplo:

Char nombre[7]=”Manuel”;

printf(“%s es en creador de este manual”, nombre);

NOTA: el n�mero de argumentos que tendr� la funci�n printf() es indefinido, por lo que se puede transmitir cuantos datos sean necesarios.

Ejemplo:

Int x=12, y=15;

char z=�D�;

float v=10.2563;

printf(“Estos son n�meros %d %d %f; y esta es una letra %c”, x,y,v,z);

Tambi�n podemos hacer algunos arreglos, al formato de salida, por ejemplo, si deseamos imprimir un n�mero real justificado a la izquierda podemos colocar:

printf(“%-f”, z);

para justificar colocarle signo: %+f

%20f >> Longitud num�rica del campo

%.2f >>Imprime el valor con s�lo dos decimales

 

Secuencias de Escapes

 

Indica que debe ejecutar algo extraordinario.

 

Car�cter de Escape

Explicaci�n

 

 

n

Simula un Enter. Se utiliza para dejar una l�nea de por medio

t

Tabulador horizontal. Mueve el cursor al pr�ximo tabulador

v

Tabulador vertical.

a

Hace sonar la alarma del sistema

\

Imprime un car�cter de diagonal invertida

?

Imprime el car�cter del signo de interrogaci�n

Imprime una doble comilla

 

TABLA 2.3

Ejemplos:

1) printf(“Manuel n Antonio n Orteznn);

2) int x=15;

printf(“El Valor de la variable es %dnn”, x);

3) float x=8.5689, pi=3.1416;

printf(“El valor de x es %.2ftn”,x);

printf(“t Y el valor de pi es %.2fnn”, pi);

 

Entrada Desde Teclado

 

Se realiza mediante la funci�n scanf(), su formato es:

scanf(“Cadena de control”, Direcci�n y nombre de la variable);

Ejemplo 2.4

Dise�e un programa que guarde y muestre la nota del examen final de 3 alumnos

#include <stdio.h>

#include <conio.h>

main()

{

float n1, n2, n3;

char nom1[10], nom2[10], nom3[10];

printf(“Introduzca el Nombre del Primer alumno:n”);

scanf(“%s”, nom1);

printf(“Introduzca la nota de este alumno:n”);

scanf(“%f”, &n1);

printf(“Digite el nombre del segundo alumno:n”);

scanf(“%s”, nom2);

printf(“Su nota es:n”);

scanf(“%f”, &n2);

printf(“Finalmente el ultimo alumno es:n”);

scanf(“%s”, nom3);

printf(“Y su nota es:n”);

scanf(“%f”, &n3);

getch();

return 0;

}

 

Explicaci�n:

 

Primero, iniciamos con las directivas del preprocesador:

#include <stdio.h>

#include <conio.h>

Con la cual le indicamos al compilador, que de su librer�a a�ada a nuestro programa las funciones est�ndar de entrada y salida; as� como las entradas y salidas por consola (stadio.h y conio.h, respectivamente).

Luego declaramos la variables, que contendr�n las notas como reales (o de punto flotante:

float n1, n2, n3;

Ya que, las notas pueden ser deciamales, por ejemplo 9.6, 8.5; etc.

Luego declaramos las variables, que contendr�n las notas, caba aclarar que al momento de las declaraciones las podemos hacer en el orden que deseemos, pueden ser primeros los tipo char y luego los float, o viceversa, pero teniendo el cuidado que las variables que contendr�n las nombres lleven la longitud m�xima entre corchetes, para nuestro caso, 10. ( [10] ).

Posteriormente, mostramos en pantalla, un mensaje con el cual le indicamos al usuario que introduzca los datos respectivos:

printf(“Introduzca el Nombre del Primer alumno:n”);

A continuaci�n, va la funci�n scanf, primero y entre comillas el tipo de dato que va a leer:

scanf(“%s”, nom1);

como puede notarse, va a leer la cadena de texto que contendr� la variable nom1. cabe aclarar, que cuando se van a leer cadenas de texto, no es necesario colocar la direcci�n (&), lo cual no sucede con los otros tipos de datos:

scanf(“%f”, &n1);

Despu�s de haber le�do los datos, espera a que se presiones cualquier tecla para finalizar la ejecuci�n del programa.

Ejemplo 2.5

Programa que imprime dos veces, la cadena de texto que se ha introducido:

#include <stdio.h>

#include <conio.h>

main()

{

char cadena[15];

printf(“Digite la cadena:nn”);

scanf(“%s”, cadena);

printf(“nt LA CADENA ES LA SIGUIENTE:nn”);

printf(“***********************************************n”);

printf(“%sn”, cadena);

printf(“%sn”, cadena);

printf(“***********************************************n”);

getch();

return 0;

}

Es importante, que el lector, intente correr, en su m�quina estos ejemplos, para que comprenda con mayor facilidad.

NOTA: Cuando la entrada, es una cadena de car�cter, no es necesario el operador direccional (&). El nombre de la cadena contiene la direcci�n.

Ejemplo:

Char cadena[]=”Manuel”;

scanf(), finaliza la captaci�n de la cadena al encontrar un espacio en blanco o fin de l�nea.

Ejemplo:

char cadena[15];

printf(“Digite la cadena:nn”);

scanf(“%s”, cadena);

 

Casos Especiales

 

*JUEGO DE INSPECCI�N: Define Un conjunto de caracteres que puede leerse utilizando scanf().

As�:

%[ABC]s: A, B y C son los �nicos caracteres que puede leer al encontrar uno diferente, finaliza con un valor nulo.

%[ A-Z ]s: Tambi�n pueden ser rangos de car�cter en este caso s�lo acepta may�sculas.

*JUEGO INVERSO: Aqu� se declaran que caracteres NO puede tomar, la funci�n scanf(), se utiliza el circunflejo (^), que acepta cualquiera menos…

Ejemplo:

%[^n]s: Acepta cualquier car�cter menos un salto de l�nea.

%[^0-9]s: Acepta cualquier car�cter menos del 0 al 9.

Ejemplo:

Scanf(“%[0-9]s”, &edad);

Cuestionario

  1. Mencione y Explique que es la l�gica estructurada:________________________________________________________________________________________________________________________________________________________________________________
  2. Para que sirven las funciones getch() y putchar():___________________________________________________________________________________________________________________________________________________________________________________
  3. Menciones las diferencias fundamentales entre las funciones de entrada y salida por consola, con las funciones de entrada y salida por consola con formato:___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
  4. Escriba algunas restricciones que deben cumplir los Identificadores:______________________________________________________________________________________________________________________________________________________________________________
  5. �Cu�l es la siferencia entre el tipo de dato %c, y el tipo de dato %s?:_________________________________________________________________________________________________________________________________________________________________________________________
  6. Para que sirve la directiva <stdio.h>:____________________________________________________________________________________________________________________________________________________________________________________
  7. �Y la directiva <conio.h>?__________________________________________________________________________________________________________________________________________________________________________________
  8. �Para que sirve a declaratoria #define?:_____________________________________________________________________________________________________________________
  9. Para que sirve el punto y coma (;) en C:____________________________________________________________________________________________________________________________
  10. En C, no existe el tipo de dato string; sin embargo, podemos hacer uso de las cadenas de texto, �Por qu�?. Explique:_____________________________________________________________________________________________________________________

Ejercicios:

  1. Haciendo uso de las funciones gets y puts, dise�e un programa en C, que se lea el nombre del usuario y lo muestre en pantalla junto con un saludo.
  2. Dise�e un programa en C, que lea y muestre en pantalla el valor de tres variables de tipo Entero.
  3. Dise�e un programa que muestre, los diferentes tipos de datos, usados en C. Primero, debe indic�rsele al usuario que introduzca un valor, de un tipo dado; luego y despu�s de haber introducido valores en todas las variables, debe imprimirse el contenido de ellas, junto con un mensaje que indique, el tipo de dato:

 

4. Dise�e un programa, en el cual se introduzcan
el nombre y el peso y de un alumno, y luego la muestre en pantalla. El Nombre
debe incluir el apellido, y en el campo del peso, solo deben incluir valores
num�ricos.

5. Dise�e un programe en C, en el cual despu�s
de haber introducido, una tabla de multiplicaci�n cualquiera, imprima
�sta en forma de tabla:

2×2=4

2×3=6

2×4=8

.

.

 

2×10=20

6. Realice el ejercicio 2.5, tal como se muestra, luego ejec�talo,
nuevamente, pero quit�ndole al c�digo las sentencias: getch()
y return 0. �Qu� observas? Realiza tus propias conclusiones de ello
y de la importancia de estas dos funciones.

 

Cap�tulo III “Operadores,
Expresiones y Estructuras

 

Hasta ahora, pr�cticamente hemos visto, como el protocolo
esencial, para realizar un programa en C; y algunas funciones muy importantes,
como son las funciones de lectura e impresi�n (scanf y printf, respectivamente).

Ahora veremos, otros aspectos fundamentales, como lo son
los operadores, que pueden ser: l�gicos, matem�ticos, relacionales,
etc. Las expresiones, y las estructuras: de secuenciaci�n, de selecci�n
y de iteraci�n.

 

Operadores

 

 

Un operador, es un s�mbolo que indica al compilador que se lleve a cabo ciertas manipulaciones matem�ticas o l�gicas.

 

Operadores Aritm�ticos

 

Operador

Prop�sito

+

Suma

Resta

*

Multiplicaci�n

/

Divisi�n

%

Resto de la divisi�n entera

 

 

TABLA 3.1

 

Todos estos operadores se pueden aplicar a constantes, variables y expresiones. El resultado es el que se obtiene de aplicar la operaci�n correspondiente entre los dos operandos. (Tomado de “Aprenda Lenguaje ANSII C, como si estuviera en primero”. Pag. 25).

Los operandos sobre los que act�an los operadores aritm�ticos deben ser valores Num�ricos, es decir datos enteros, punto flotante o de car�cter (Int, float y char, respectivamente).

Una aclaraci�n especial, merece el operador “%”, que indica el resto de la divisi�n entera. Ve�moslo con un ejemplo:

Si dividimos 30/3, su cociente es 10, y su residuo es 0. Si dividimos 25/3, su cociente es 8, y tiene un residuo de 1. Entonces de lo que se encarga, este operador, es de devolvernos el valor del residuo de una divisi�n. Cabe aclarar que los datos deben de ser tipo entero, y su sintaxis es la siguiente:

25%3

NOTA: Este Operador, NO puede aplicarse a los datos de tipo float.

Una Expresi�n, Es un conjunto de variable, constantes y otras expresiones m�s sencillas, relacionadas por alg�n tipo de operador. De las cuales hablaremos con m�s detalle, posteriormente.

 

Operadores de Relaci�nales, L�gicos y Unarios

 

Estos Operadores, los podemos dividir, en varios tipos, entre los cuales est�n:

 

  • OPERADORES UNARIOS: C, incluye una clase de operadores que act�an sobre un solo operador para producir un nuevo valor. Por eso el nombre de unarios, por que para poder funcionar solo necesitan de un operador.

 

Operador

Prop�sito

 

  1.  

    Menos Unario: Es el signo menos que va delante de una variable, constante o expresi�n.

    ++

    Operador Incremento: Hace que la variable, constante o expresi�n se aumente en uno.

    Operador Decremento: Hace que su variable, constante o expresi�n disminuya en uno.

 

TABLE 3.2

Ejemplo:

Int i=1, x=5;

Printf(“%d”, ++i);

Printf(“%d”, – -i);

Estos operadores, el incremento y el decremento, pueden utilizarse de dos maneras, eso depende del orden de aparici�n de los mismos:

-Si el operador precede al operando el valor del operando se modifica antes de ser utilizado.

-Si el operador aparece despu�s del operando, este se modifica despu�s de ser utilizado.

Ejemplo 3.1:

Utilizando los operadores Unarios:

#include <stdio.h>

#include <conio.h>

main()

{

int x=5;

printf(“tPRIMERO OBSERVAREMOS EL RESULTADO DE ++Xnn”);

printf(“%dn”, ++x);

printf(“%dn”, ++x);

printf(“%dn”, ++x);

printf(“tAHORA OBSERVAREMOS EL RESULTADO DE –Xnn”);

printf(“%dn”, –x);

printf(“%dn”, –x);

printf(“%dn”, –x);

printf(“tEL RESULTADO DE X++ ES:nn”);

printf(“%dn”, x++);

printf(“%dn”, x++);

printf(“tY EL DE X– ES:nn”);

printf(“%dn”, x–);

printf(“%dn”, x–);

getch();

return 0;

}

    1. OPERADORES RELACIONALES O DE COMPARACI�N:

 

Operador

  1. Significado

    <

    Menor que

    <=

    Menor o igual que

    >

    Mayor que

    >=

    Mayor o igual que

    ==

    Igual que (Para las comparaciones)

    !
    =

    No igual a

 

TABLA 3.3

Estos Operadores se encuentran dentro del mismo grupo de procedencia, que es menor que la de los Operadores Unarios y aritm�ticos.

La Asociatividad de �stos es de izquierda a derecha. Cabe mencionar la diferencia entre los operadores = y ==, el primero (=), se utiliza para asignaciones de valores, mientras que el otro (==), se usa para comparaciones. Ejemplo: Si x>5, entonces x==6.

3. OPERADORES L�GICOS: Estos son los que nos permiten unir varias comparaciones: 10>5 y 6==6. Los operadores l�gicos son: AND (&&), OR (||), NOT(!).

Operador && (AND, en castellano Y): Devuelve un 1 si se cumplen dos condiciones.

printf( “Resultado: %i”, (10==10 && 5>2 );

Operador || (OR, en castellano O): Devuelve un 1 si se cumple una de las dos condiciones.

Operador ! (NOT, negaci�n): Si la condici�n se cumple NOT hace que no se cumpla y viceversa.

Ver el cap�tulo Sentencias, secci�n Notas sobre las condiciones para m�s informaci�n. (Tomado de “Curso de C” por Gorka Urrutia).

 

Operadores de Asignaci�n

 

Los Operadores de Asignaci�n, como su nombre lo indica, se encargan de atribuirle, asignarle, confinarle, etc a una variable, el resultado de una expresi�n o el valor de otra variable.

Se utilizan en forma de expresiones de asignaci�n en los que se asigna en el valor de una expresi�n a un identificador. El operador de asignaci�n m�s utilizado es “=” y su formato es:

 

identificador = expresi�n;

 

Donde el identificador representa por lo general una variable y una constante, una variable o una expresi�n m�s compleja.

Si los dos operandos de la expresi�n de asignaci�n son de tipo de datos diferentes el valor de la expresi�n de la derecha se convertir� autom�ticamente al tipo de identificador de la izquierda de �sta forma la expresi�n de asignaci�n ser� del mismo tipo de datos.

Ejemplo:

*Un valor en coma flotante puede ser truncado, se asigna a un identificador entero.

*Un valor de doble precisi�n puede ser redondeado si se asigna a un identificador de coma flotante.

En C, est�n permitidas las asignaciones m�ltiples, as�:

 

Identificador1 = identificador2 = identificador3…..= identificadorn=expresi�n

 

C, posee adem�s los siguientes operadores de asignaci�n:

 

Operador

Explicaci�n

  1. +=

    Expresi�n1+=expresi�n2. Equivale a: expresi�n1=expresi�n1 + expresi�n2

    -=

    i-=1. equivale a: i=i-1

    *=

    J*=2. Equivale a: j=j*2

    /=

    K/=m, equivale a: k=k/m

    %=

    P%n. Equivale a: p=p%n

 

TABLA 3.4

Los Operadores de asignaci�n tiene menos procedencia que el resto de los operadores y tienen asociatividad de izquierda a derecha.

Ejemplo 3.2

Programa que calcula el valor de la expresi�n X^2+X+1

#include <stdio.h>

#include <conio.h>

main()

{

float x, y, z;

clrscr();

printf(“tPROGRAMA QUE CALCULA EL VALOR DE LA ECUACION X^2+X+1nn”);

printf(“Introduzaca el valor de x:n”);

scanf(“%f”, &x);

y=x*x;

z=y+x+1;

printf(“**************************************n”);

printf(“**El valor de la expresi�n es: %.2f**n”, z);

printf(“**************************************n”);

getch();

return 0;

}

 

Jerarqu�a de Operadores

 

Categor�a del Operador

  1. Operador

    1. Operadores Unarios

    -, ++, –, !

    2.Operadores Aritm�ticos:

        1. Multiplicaci�n, divisi�n y Resto entero
        2. Suma y Resta

     

    *, /, %

     

    +,-

    3. Operadores Relacionales

    <, <=, >, >=

    4. Operadores de Igualdad

    ==, !
    =

    5. Operadores L�gicos

    && (Y L�gico), || (NO L�gico)

    6. Operadores de Asignaci�n

    =, +=, -=, *=, /?, %=,

 

TABLA 3.5

REGLAS DE JERARQU�A:

      1. Se ejecuta primero el operador de m�s alta jerarqu�a
      2. Operadores que tienen igual jerarqu�a se eval�an de izquierda a derecha
      3. si existen expresiones encerradas entre par�ntesis, estas se eval�an primero.
      4. si existen par�ntesis anidados se eval�an primero los par�ntesis m�s internos.

 

 

EXPRESIONES

 

(Tomado de “Aprenda ANSII C como si estuviera en Primero”,
Universidad de Navarra. 1998).

Ya han aparecido algunos ejemplos del lenguaje C en las secciones
precedentes. Una Expresi�n es una combinaci�n de variables
y/o constantes, y operadores. La expresi�n es equivalente al resultado
que proporciona al aplicar sus operadores a sus operandos. Por ejemplo 1 + 5
es una expresi�n formada por dos operandos (1 y 5)y el operador (el +);
esta expresi�n es equivalente al valor 6, por lo cual quiere decir que
all� donde esta expresi�n aparece en el programa, en el momento
de la ejecuci�n es evaluada y sustituida por su resultado. Una expresi�n
puede estar formada por otras expresiones m�s sencillas, y puede contener
par�ntesis de varios niveles agrupando distintos t�rminos. En
C, existen diferentes tipos de expresiones. El cual depende del tipo de operadores
que se est�n utilizando. Por ejemplo: Expresiones l�gicas, aritm�ticas,
etc

Se debe hacer hincapi� en que, si existen algunas expresiones
encerradas entre par�ntesis, estas se eval�an primero. Ejemplo:

9*(8+5)

primero sumamos 8+5, cuyo resultado es 13, y este lo multiplicamos
por nueve, con lo que la expresi�n anterior, da c�mo resultado:
117.

Si existen expresiones en par�ntesis anidadas, es decir,
que uno se encuentra dentro de otros par�ntesis, se eval�an los
m�s internos. Ejemplo:

2*((20/(12-2))+5)

se eval�a la operaci�n 12-2, que da como resultado
10, luego se divide 20, entre el resultado anterior, es decir 10. el resultado
es 2, y a este n�mero se le suma 5, obteniendo 7. ahora se multiplica
por dos, para determinar as� que la expresi�n anterior es igual
a 14.

 

Estructuras

Estructuras Secuenciales

 

Se les denomina as�, por que; son estructuras en un
programa, que despu�s de ejecutar una instrucci�n o sentencia,
contin�an con la otra, hasta llegar al final del programa. Los ejemplos
que hemos visto anteriormente, son ejemplos de estructuras secuenciales. Veamos
otros ejemplos:

Ejemplo 3.3

Dise�e un programa que calcula el cuadrado y el cubo
de tres n�meros introducidos por el usuario.

#include <stdio.h>

#include <conio.h>

main()

{

int x, x1, x2, y, y1, y2, z, z1, z2;

clrscr();

printf(“tPROGRAMA QUE CALCULA EL CUADRADO Y EL CUBO DE 3
NUMEROSnn”);

printf(“Introduzaca el primer n�mero:n”);

scanf(“%d”, &x);

printf(“Ahora ingrese el siguiente n�mero:n”);

scanf(“%d”, &y);

printf(“Y el tercer n�mero es:n”);

scanf(“%d”, &z);

x1=x*x;

x2=x*x*x;

y1=y*y;

y2=y*y*y;

z1=z*z;

z2=z*z*z;

printf(“*********************************n”);

printf(“**Numero****Cuadrado*****Cubo****n”);

printf(“**%d **** %d ***** %d ****n”, x, x1, x2);

printf(“**%d **** %d ***** %d ****n”, y, y1, y2);

printf(“**%d **** %d ***** %d ****n”, z, z1, z2);

printf(“*********************************n”);

getch();

return 0;

}

Ejemplo 3.4

Una empresa necesita conocer el sueldo neto a pagar a un empleado.
Teniendo como entrada el salario produzca una salida de sueldo neto. Los descuentos
a aplicar son: ISSS 5%, AFP 7% y Renta 10%, estos descuentos son sobre el salario,
y es sueldo neto es la diferencia entre el salario y el total de las retenciones:

#include <stdio.h>

#include <conio.h>

main()

{

float sueldo, afp, isss, renta, sn;

char nombre[50];

clrscr();

printf(“Introduzca el Nombre del empleado:n”);

scanf(“%s”, nombre);

printf(“Su sueldo es:n”);

scanf(“%f”, &sueldo);

afp=sueldo*0.07;

isss=sueldo*0.05;

renta=sueldo*0.10;

sn=sueldo-(afp+isss+renta);

printf(“El empleado %sn”, nombre);

printf(“Posee un sueldo neto de %.2fn”, sn);

getch();

return 0;

}

Ejemplo 3.5

Dise�e un programa que calcule el promedio y la suma
de tres n�meros ingresados por el usuario:

#include <stdio.h>

#include <conio.h>

main()

{

float x, y, z, sum, prom;

clrscr();

printf(“El Primer n�mero es:n”);

scanf(“%f”, &x);

printf(“Ahora el segundo n�mero:n”);

scanf(“%f”, &y);

printf(“El Ultimo numero es:n”);

scanf(“%f”, &z);

sum=x+y+z;

prom=sum/3;

printf(“*****************************************n”);

printf(“**La suma es %.2f y el promedio es %.2f*n”, sum,
prom);

printf(“*****************************************n”);

getch();

return 0;

}

 

Estructuras Selectivas

 

Los peque�os programas que hemos dise�ada hasta
el momento, han sido del tipo secuencial, es decir, una sentencia se ejecuta
despu�s de otra, hasta el final del programa.

Pero en la vida diaria muchas veces debemos elegir entre un
camino y otro para llegar a nuestro destino. Lo mismo pasa en programaci�n,
al realizar alguna actividad, nuestro programa debe ser capaz de elegir uno
u otro camino, a seguir dependiendo del valor de alguna condici�n evaluada.

Para ello C, dispone de tres tipos de 3 tipos de estructuras
selectivas, la cuales son:

  • Estructura Selectiva Simple
  • Estructura Selectiva Doble
  • Estructura Selectiva M�ltiple
  • ESTRUCTURA SELECTIVA SIMPLE

Funciona de la siguiente manera: se eval�a una condici�n,
de ser cierta efect�a una acci�n, de lo contrario, contin�a
con la ejecuci�n normal del programa.

Su sintaxis es la siguiente:

If(condici�n) Acci�n;

O tambi�n:

If(Condici�n)

 

Acci�n;

 

Donde:

Condici�n: Es una expresi�n l�gica que
es evaluada por el compilador

Acci�n: es la Acci�n o Acciones que realizar�
el programa de resultar cierta la condici�n

NOTA: En C, no existe la sentencia “End If”, como
en otros lenguajes de programaci�n para indicar que ha terminado el bloque
de selecci�n, sino que este se especifica con el punto y coma al final.
Adem�s que, despu�s de la condici�n NO se escribe un punto
y coma. Si son varias acciones, estas deben ir dentro de llaves {}, para indicarle
al compilador que son un solo bloque de acciones que deben ejecutarse.

Ejemplo 3.6

En una tienda se venden art�culos de primera necesidad,
a los cuales se les aplica un descuento del 20%, de la compra total, si esta
es igual o mayor a $50. Dise�e un programa en C, que a partir del importe
total de la compra muestre lo que debe pagar el cliente.

#include <stdio.h>

#include <conio.h>

main()

{

float compra;

clrscr();

printf(“Introduzca el valor de la compra:n”);

scanf(“%f”, &compra);

if(compra>=50)

compra=compra*0.8;

printf(“El Importe de la compra es %.2fnn”, compra);

getch();

return 0;

}

  • ESTRUCTURA SELECTIVA DOBLE

Esta estructura, se caracteriza por el hecho que ofrece dos
caminos a seguir, dependiendo si al evaluar la condici�n resulta cierta
o falsa. Su sintaxis es la siguiente:

if(Condici�n)

 

Acci�n 1;

else

Acci�n 2;

 

Funciona, de la siguiente manera si condici�n,
al evaluarla resulta cierta, realiza la acci�n 1. de lo contrario,
es decir; si al evaluar la condici�n resulta falsa, realiza la acci�n
2.

Se debe tener en cuenta la condici�n puede ser compuesta,
es decir haciendo uso de los operadores && y || ( Y l�gico y
No l�gico), adem�s que cuando tenemos m�s de una sentencia
por ejecutar ya sea del lado del cierto o del falso, estas van dentro de llaves.

Ejemplo 3.7

Se desea saber si un n�mero es par o impar. Dise�e
un programa en el cual el usuario, ingrese el n�mero y el programa muestre
con un mensaje, si �ste es par o no.

#include <stdio.h>

#include <conio.h>

main()

{

int num;

printf(“Ingrese el n�mero:n”);

scanf(“%d”, &num);

if(num%2==0)

printf(“ES PARnn”);

else

printf(“ES IMPARnn”);

getch();

return 0;

}

Ejemplo 3.8

Dise�e un programa, que dada la nota de alumno, imprima
en la pantalla un comentario sobre esa nota. El criterio para los comentarios
es el siguiente:

Si nota es mayor o igual a 9 “Excelente”

Si nota es mayor o igual a 8 “Muy Bueno”

Si nota es mayor o igual a 7 “Bueno”

Si nota es mayor o igual a 6 “Regular”

Si nota es menor que 6 “Necesita Mejorar”

#include <stdio.h>

#include <conio.h>

main()

{

float nota;

printf(“Digite la nota, porfavor:n”);

scanf(“%f”, &nota);

if(nota >= 9.0)

printf(“EXCELENTEnn”);

else

if(nota >= 8.0)

printf(“MUY BUENOnn”);

else

if(nota >= 7.0)

printf(“BUENOnn”);

else

if(nota >=6.0)

printf(“REGULARnn”);

else

printf(“NECESITA MEJORARnn”);

getch();

return 0;

}

Este ejemplo, muestra que C, permite hacer anidamientos, es
decir, una selecci�n dentro de otra, ya sea del lado del cierto, o del
falso o de ambos.

El lector, puede tratar de hacer sus propias conclusiones,
adem�s de buscar otras posibles solucione para este mismo problema. Por
ejemplo, �que pasar�a si iniciamos con la condici�n del 6.0?.
�Qu� pasar�a si el usuario digita una neta negativa? �C�mo
podr�as darle soluci�n a este problema?. Como programadores, debemos
hacernos muchas preguntas al momento de dise�ar nuestros programas, ya
que estos No ser�n usados por nosotros, sino por otras personas.

Ejemplo 3.9

Dada el peso, la altura y el sexo, de unos estudiantes. Determinar
la cantidad de vitaminas que deben consumir estos estudiantes, en base al siguiente
criterio:

>> Si son varones, y su estatura es mayor a 1.60, y su
peso es mayor o igual a 150 lb, su dosis, ser�n: 20% de la estatura y
80% de su peso. De lo contrario, la dosis ser� la siguiente: 30% de la
estatura y 70% de su peso.

>> Si son mujeres, y su estatura es mayor de a 1.50 m
y su peso es mayor o igual a 130 lb, su dosis ser�: 25% de la estatura
y 75% de su peso. De lo contrario, la dosis ser�: 35% de la estatura
y 65% de su peso. La dosis debe ser expresada en gramos.

#include <stdio.h>

#include <conio.h>

main()

{

float peso, estatura, dosis;

char sexo;

printf(“Introduzca el sexo del alumno(a)<H/M>:n”);

scanf(“%c”, &sexo);

printf(“Peso:n”);

scanf(“%f”, &peso);

printf(“La estatura es de:n”);

scanf(“%f”, &estatura);

if(sexo==’H’ || sexo==’h’)

{

if(estatura>1.60 && peso >=150)

{

dosis=(0.20*estatura)+(0.8*peso);

printf(“La dosis de este alumno ser : %.2f gramosnn”,
dosis);

}

else

{

dosis=(0.3*estatura)+(0.7*peso);

printf(“La dosis de este alumno sera %.2f gramosnn”,
dosis);

}

}

else

{

if(estatura>1.50 && peso >=130)

{

dosis=(0.25*estatura)+(0.75*peso);

printf(“La dosis de esta alumna debe ser de %.2f gramosnn”,
dosis);

}

else

{

dosis=(0.35*estatura)+(0.65*peso);

printf(“La dosis de esta alumna debe ser de %.2f gramosnn”,
dosis);

}

}

getch();

return 0;

}

  • SELECCI�N M�LTIPLE

Como su nombre lo indica, permite seleccionar entre varios
caminos para llegar al final. En este caso se pueden elegir un camino o acci�n
a ejecutar de entre varios posibles que se debe de evaluar, llamada selector.
Sintaxis:

switch(selector)

 

{

 

case Etiqueta A:

Acci�n A;

break;

case Etiqueta B:

Acci�n B;

break;

case Etiqueta n:

Acci�n n;

break;

 

default:

 

Excepci�n;

break;

 

}

 

En donde:

Selector: Variables, expresiones simples de tipo ordinal,
(enteros y caracteres �int y char-)

Etiqueta: Tiene que ser del mismo tipo de datos de selecto.
Estas deber ser constantes �nicas y diferentes de otras.

Excepci�n: Es opcional.

Ejemplo 3.10

Dise�e un programa en C, que dado un n�mero del
1 al 3, muestre en pantalla y en letras, el mismo n�mero:

#include <stdio.h>

#include <conio.h>

main()

{

int n;

clrscr();

printf(“El N�mero es:n”);

scanf(“%d”, &n);

switch(n)

{

case 0: puts(“Cero”);

break;

case 1: puts(“Uno”);

break;

case 2: puts(“Dos”);

break;

case 3: puts(“Tres”);

break;

default: puts(“Dato No valido”);

break;

}

getch();

return 0;

}

Cuestionario

  1. Mencione las diferencias entre las expresiones y los operadores:______________________________________________________________________________________________________________________________________
  2. Que tipo de datos son v�lidos para los operadores aritm�ticos:______________________________________________________
  3. Explique, el resultado de los operadores incremento y decremento, dependiendo
    de su posici�n:___________________________________________________________________________________________________________________________________________________________________________________________
  4. �Qu� son y para que sirven los operadores unarios?:__________________________________________________________________________________________________________________________
  5. Explique, el funcionamiento de los operadores de asignaci�n:________________________________________________________________________________________________________________________________________________________________________________________

Ejercicios:

  1. Dise�e un programa que dados tres n�meros indique cual es
    el mayor de ellos.
  1. Dise�e un programa que dados tres n�meros indique cual de
    ellos es el menor.
  2. En un cine se exhiben, pel�culas para mayores de edad, dise�e
    un programa que dada la edad, indique si la persona puede o no ver la pel�cula.
  3. En un supermercado, se realizan descuentos por las compras a partir de unas
    bolitas de colores. Si el cliente saca una bolita color azul, tiene un descuento
    del 20%, si la bolita es roja, se aplica un descuento del 30% y si saca una
    bolita color blanca, no se aplica ning�n descuento. Dise�e un
    programa que a partir del importe de la compra y el color de la bolita, muestre
    lo que debe pagar dicho cliente.
  4. Se procesan las notas de 5, alumnos, de las cuales se desea saber cual es
    el promedio de esas 5 notas, y cual fue la nota mayor y menor, adem�s
    de imprimir al final el nombre y la nota de cada alumno en forma de tabla.
  5. un estudiante desea saber cu�l fue su promedio en matem�tica
    I, para ello dispone de la siguiente informaci�n: tiene 3 ex�menes,
    con una ponderaci�n del 20% cada uno y 2 laboratorios con una ponderaci�n
    del 30% cada uno. Dise�e un programa que dadas las notas calcule el
    promedio del alumno y muestre en pantalla si el alumno esta reprobado o no
    (para aprobar esta materia se requiere de una nota mayor o igual a 6.00).
  6. En un estacionamiento, se cobra de la siguiente manera: los primeros 10
    minutos son gratis, los siguientes 30 minutos tiene un valor de $0.30 y la
    hora $0.60. dise�e un programa que reciba tanto minutos como horas
    y muestre lo que debe cancelar el cliente. Tomando en cuenta que si es Martes
    y S�bado se hace un descuento del 12.56% sobre el monto total.
  7. Dise�e un programa que al introducir un d�gito del 0 a 9,
    muestre como se lee.
  8. Dise�e un peque�a calculadora que, al digitar un c�digo
    realice una operaci�n espec�fica: si el c�digo es 1,
    la operaci�n es la suma, si es 2, Resta. 3, multiplicaci�n y
    4 divisi�n. Si el usuario a escrito otro c�digo inv�lido,
    mostrar un mensaje de error.
  9. Construya un programa que dado el salario de un empleado, permita aplicarle
    un aumento de 10% si el salario es inferior a $500, si es mayor se le aumentar�
    un 8%. Luego debe aplicar una retenci�n del 0.96% en concepto de Renta
    a ambos casos.
  10. Se desea calcular el sueldo de un trabajador, a partir de las horas trabajadas
    en la semana y la clase a la que pertenece: Trabajadores Clase “A”,
    se les paga $7 por hora. Trabajadores clase “B”, se paga $5 por
    hora. Trabajadores clase “C”, se les paga $4 por hora y los de clase
    “D”, $3.5 por hora.
  11. Un comerciante se dedica a la venta de sillas �nicamente. Vende tres
    tipos de sillas: tipo A, tipo B y Tipo C los precios son $5.00, $7.00 y $10.00
    respectivamente. Por cada cinco sillas compradas del tipo A, del tipo B o
    del tipo C los clientes reciben un descuento de 3%, 5% y 7%, las dem�s
    se cobran a precio normal. Dise�e un programa que imprima en forma
    de factura, con el nombre, precio unitario, precio total, nombre de la tienda,
    etc lo que debe cancelar cada cliente en concepto de la compra.

Descubre donde est� el error.

El siguiente c�digo, es de un programa que a partir
de una nota determina si un alumno esta o no reprobado, y este puede presentar
algunos errores de l�gica, de sintaxis o de ejecuci�n. �Puedes
descubrirlos y modificarlos?

#Include <stdio.h>

#incluide <conio.h>

main()

{

float nota;

printf(“Digite la nota:n”)

scanf(“%f”, nota);

if(nota>=6.00)

printf(“Aprobadonn);

else

printf(Reprobadonn);

getch();

return 0;

}

 

 

Partes: 1, 2, 3, 4, 5, 6
 P�gina anterior Volver al principio del trabajoP�gina siguiente 
 P�gina anterior Volver al principio del trabajoP�gina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter